Applications characterized as “latency sensitive” are, typically, highly susceptible to execution delays and jitter (i.e., unpredictability) introduced by the computing environment in which these applications run. Examples of latency sensitive applications include financial trading systems, which usually require split-second response time when performing functions such as pricing securities or executing and settling trades.
Execution delay and jitter are often present in networked virtualized computing environments. Such computing environments frequently include a number of virtual machines (VMs) that execute one or more applications that rely on network communications. These virtualized applications communicate over the network by transmitting data packets to other nodes on the network using a virtual network interface controller (or VNIC) of the VM, which is a software emulation of a physical network interface controller (or PNIC). The use of a VNIC for network communication results in latency and jitter for a number of reasons.
First, VNIC-based communication requires transmitted and received packets to be processed by layers of networking software not required for packets that are directly transmitted and received over a PNIC. For example, data packets that are transmitted by a virtualized application are often transmitted first to a VNIC. Then, from the VNIC, the packets are passed to software modules executing in a hypervisor. Once the packets are processed by the hypervisor, they are then transmitted from the hypervisor to the PNIC of the host computer for subsequent delivery over the network. A similar, although reverse, flow is employed for data packets that are to be received by the virtualized application. Each step in the flow entails processing of the data packets and, therefore, introduces latency.
Further, VNICs are often configured to queue (or coalesce interrupts corresponding to) data packets before passing the packets to the hypervisor. While packet queueing minimizes the number of kernel calls to the hypervisor to transmit the packets, latency sensitive virtualized applications that require almost instantaneous packet transmission (such as, for example, telecommunications applications) suffer from having packets queued at a VNIC.
VNICs are also configured to consolidate inbound data packets using a scheme known as large receive offload (or LRO). Using LRO, smaller Transmission Control Protocol (TCP) packets that are received at a VNIC are consolidated into larger TCP packets before being sent from the VNIC to the virtualized application. This results in fewer TCP acknowledgments being sent from the virtualized application to the transmitter of the TCP packets. Thus, TCP packets can experience transmission delay.
Finally, a PNIC for a host computer may be configured to queue data packets that it receives. As is the case with the queuing of data packets at a VNIC, queuing data packets at a PNIC often introduces unacceptable delays for latency senstive virtualized applications.